﻿using Dynamic.Json;

namespace _083.中间件入门
{
    // 检查请求中是否有password=123的查询字符串，而且会把请求报文体按照Json格式尝试解析为dynamic类型的对象，
    // 并且把dynamic对象放入context.Items中供后续的中间件或者Run使用。
    public class CheckAndParsingMiddleware
    {
        private readonly RequestDelegate next;
        public CheckAndParsingMiddleware(RequestDelegate next)
        {
            this.next = next;
        }
        public async Task InvokeAsync(HttpContext context)
        {
            string pwd = context.Request.Query["password"];
            if (pwd == "123")
            {
                // 如果是json请求
                if (context.Request.HasJsonContentType())
                {
                    var reqStream = context.Request.BodyReader.AsStream();
                    // 把json 序列化为dynamic类型
                    dynamic? jsonObj = DJson.Parse(reqStream);
                    context.Items["BodyJson"] = jsonObj;
                }
                await next(context);
            }
            else 
                context.Response.StatusCode = 401;
        }
    }
}
